/*
 * Copyright (C) 2011 Daniel Himmelein
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "mindroid/os/Looper.h"
#include "mindroid/os/Handler.h"
#include "mindroid/os/Message.h"

namespace mindroid {

Looper* Looper::sInstance = NULL;

Looper::Looper() :
        mMessageQueue(),
        mRunnableQueue(*this) {
    sInstance = this;
}

Looper* Looper::myLooper() {
    return sInstance;
}

void Looper::loop(const uint32_t maxLoops) {
    uint32_t i = 0;
    while (i < maxLoops) {
        Message* message = mMessageQueue.dequeueMessage(mMessage, false);
        if (message == NULL) {
            return;
        }
        Handler* handler = message->target;
        message->target = NULL;
        handler->dispatchMessage(*message);
        i++;
    }
}

} /* namespace mindroid */
